home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-09-10 | 2.5 KB | 84 lines | [TEXT/MMCC] |
- // File "prefs.c" -
-
- #include "prefs.h"
-
- // * **************************************************************************** * //
- // * **************************************************************************** * //
-
- Handle GetPrefs(long type, short version) {
- short prefsRefNum, saveRefNum;
- Handle rsrc, pref=0;
-
- saveRefNum = CurResFile();
- if ((prefsRefNum = OpenPrefsFile()) == -1) return(0);
-
- if (! (rsrc = Get1Resource(type, version))) goto GET_PREFS_ERROR;
- if (! (pref = NewHandle(GetHandleSize(rsrc)))) goto GET_PREFS_ERROR;
- BlockMove(*rsrc, *pref, GetHandleSize(rsrc));
-
- ReleaseResource(rsrc);
-
- GET_PREFS_ERROR:
- CloseResFile(prefsRefNum);
- UseResFile(saveRefNum);
- return(pref);
- }
-
- // * **************************************************************************** * //
- // * **************************************************************************** * //
-
- void WritePrefs(Handle pref, long type, short version) {
- short prefsRefNum, saveRefNum;
- Handle rsrc, oldRsrc;
-
- saveRefNum = CurResFile();
- if ((prefsRefNum = OpenPrefsFile()) == -1) return;
-
- if (rsrc = Get1Resource(type, version)) RemoveResource(rsrc);
-
- if (pref) {
- if (! (rsrc = NewHandle(GetHandleSize(pref)))) goto WRITE_PREFS_ERROR;
- BlockMove(*pref, *rsrc, GetHandleSize(pref));
-
- AddResource(rsrc, type, version, "\p");
- if (ResError()) goto WRITE_PREFS_ERROR;
- WriteResource(rsrc);
- }
-
- WRITE_PREFS_ERROR:
- CloseResFile(prefsRefNum);
- UseResFile(saveRefNum);
- }
-
- // * **************************************************************************** * //
- // * **************************************************************************** * //
-
- short OpenPrefsFile() {
- short err=0, prefsRefNum;
- FSSpec prefsFile;
-
- if (err = FindFolder(kOnSystemDisk, kPreferencesFolderType, -1,
- &prefsFile.vRefNum, &prefsFile.parID)) return(-1);
- BlockMove(kPrefsFileName, prefsFile.name, sizeof(prefsFile.name));
-
- prefsRefNum = FSpOpenResFile(&prefsFile, fsRdWrPerm);
- if (err = ResError()) {
- if ((err != fnfErr) && (err = FSpDelete(&prefsFile))) return(-1);
- if (err = CreatePrefsFile(&prefsFile)) return(-1);
- prefsRefNum = FSpOpenResFile(&prefsFile, fsRdWrPerm);
- }
- if (ResError() == fnfErr) return(-1);
- UseResFile(prefsRefNum);
- return(prefsRefNum);
- }
-
- // * **************************************************************************** * //
- // * **************************************************************************** * //
-
- short CreatePrefsFile(FSSpecPtr prefsFile) {
- short err=0;
-
- FSpCreateResFile(prefsFile, kCreatorType, kPrefsFileType, 0);
- return(err = ResError());
- }
-